package org.ph.share.lock.test.thread2;

import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.TimeUnit;


/**
 * 活锁探究
 * 活锁（Livelock）是一种类似于死锁的情况，但是不同于死锁的是，线程并没有被阻塞，它们一直在运行，但是却无法继续执行想要的操作。
 *
 * @author Hush.
 * @since 2023/1/18 19:47
 */
@Slf4j
public class Thread9 {
    static int num = 10;

    public static void main(String[] args) {
        new Thread(() -> {
            while (num >= 0) {
                try {
                    TimeUnit.SECONDS.sleep(1);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
                num--;
                log.info("num:{}",num);
            }
        }, "t2").start();
        new Thread(() -> {
            while (num < 20) {
                try {
                    TimeUnit.SECONDS.sleep(1);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
                num++;
                log.info("num:{}",num);
            }
        }, "t1").start();

    }
}
